/*
 * This file is part of LangMan.
 *
 * LangMan is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * LangMan is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with LangMan.  If not, see <http://www.gnu.org/licenses/>.
 */

package langman.util.homogenizer;

import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;
import langman.util.languagefile.commons.TranslationMode;

import java.util.*;

public class ReferenceDescription {
    private final List<String> categories = new ArrayList<>();
    private final Multimap<String, String> keysByCategory = ArrayListMultimap.create();
    private final Map<String, TranslationMode> translationModeForKeys = new HashMap<>();
    private final Map<String, String> referenceTranslations = new HashMap<>();


    public List<String> getCategories() {
        return Collections.unmodifiableList(categories);
    }

    public List<String> getKeysByCategory(String category) {
        return new ArrayList<>(keysByCategory.get(category));
    }

    public TranslationMode getTranslationModeForKey(String key) {
        return translationModeForKeys.get(key);
    }

    public String getReferenceTranslation(String key) {
        return referenceTranslations.get(key);
    }

    public boolean hasCategory(String newCategory) {
        return categories.contains(newCategory);
    }

    public void addCategory(String newCategory) {
        categories.add(newCategory);
    }

    public void translate(String currentCategory, String key, String value, TranslationMode translationMode) {
        keysByCategory.put(currentCategory, key);
        translationModeForKeys.put(key, translationMode);
        referenceTranslations.put(key, value);
    }
}
